#ifndef GAME_STATE_HPP_INCLUDED
#define GAME_STATE_HPP_INCLUDED

#include "singleton.hpp"
#include "engine.hpp"
#include "player.hpp"

class Engine;

class GameState {
	public:
		
		virtual void init(Engine *engine) = 0;
		virtual void cleanup() = 0;
		
		virtual void pause() = 0;
		virtual void resume() = 0;
		
		virtual void processEvent(Engine *engine, PlayerEvent& event) = 0;
		virtual void update(Engine *engine) = 0;
		virtual void draw(Engine *engine) = 0;
		
		void changeState(Engine* engine, GameState* state);

		virtual ~GameState();
};

#endif // GAME_STATE_HPP_INCLUDED
